#!/usr/local/env python
#coding: utf-8
import socket
import struct
import sys
 
import argparse
from json_parse import Jsonparse

 
class SMBScanner(object):
	def __init__(self, ip, port, level):
		self.pkt = b'\x00\x00\x00\xc0\xfeSMB@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x00\x08\x00\x01\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00x\x00\x00\x00\x02\x00\x00\x00\x02\x02\x10\x02"\x02$\x02\x00\x03\x02\x03\x10\x03\x11\x03\x00\x00\x00\x00\x01\x00&\x00\x00\x00\x00\x00\x01\x00 \x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\n\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00'
		self.ip = ip
		self.port = port
		self.level = level
		
	def payload(self):
		try:
			sock = socket.socket(socket.AF_INET)
			sock.settimeout(self.level)
			sock.connect((self.ip, int(self.port)))
			sock.send(self.pkt)
			nb, = struct.unpack(">I", sock.recv(4))
			res = sock.recv(nb)
 
			if not res[68:70] == b"\x11\x03":
				print(self.ip + " : Not vulnerable.")
				exit("1")
			if not res[70:72] == b"\x02\x00":
				print(self.ip + " : Not vulnerable.")
				exit("1")
			else:
				print(self.ip + " : ***** Vulnerable ****")
				exit("0")
		except Exception as e:
			print(self.ip + " : Connection refused.")
			print(e)
			exit(-1)

if __name__ == '__main__':
	jsonfile = sys.argv[1] + '\\poc\\lib\\config.json'
	jsonobj = Jsonparse(jsonfile)
	jsondata = jsonobj.parse()
	target = sys.argv[2]
	timeout = jsondata['timeout']
	port = sys.argv[3]
	Scanner = SMBScanner(target, port, timeout)
	Scanner.payload()
